
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Tools Wave - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>Tools Wave - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">参数</div>
          <div class="card-question">在使用 `run_command` 工具时，`Blocking` 参数的作用是什么？它应该在什么情况下被设置为 `true`？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">参数</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`Blocking` 参数决定命令是否阻塞执行直到完全结束。它只应该在两种情况下被设置为 `true`：(1) 命令会在相对较短的时间内完成；或者 (2) 在响应用户之前，看到命令的输出非常重要。对于长时间运行的进程（例如启动一个web服务器），此参数不应设置为 `true`。</div>
          </div>
          <div class="card-source">来源: type run_command</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">用法</div>
          <div class="card-question">当需要使用 `replace_file_content` 工具对同一个文件中的多个不相邻代码行进行编辑时，正确的操作方法是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">用法</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">应该在单次调用 `replace_file_content` 工具时完成。每次编辑都应被指定为一个独立的 `ReplacementChunk` 对象，并将这些对象放入一个 `ReplacementChunks` 数组中。不应该尝试用新内容替换整个文件的现有内容。</div>
          </div>
          <div class="card-source">来源: type replace_file_content</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">限制</div>
          <div class="card-question">`codebase_search` 工具在什么情况下搜索效果会很差？其在搜索文件数量上有什么限制？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">限制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当提出的问题非常宽泛时，例如询问一个大型组件或系统的通用“框架”或“实现”，`codebase_search` 的搜索结果会很差。此外，如果尝试搜索超过 500 个文件，搜索结果的质量会大幅下降。</div>
          </div>
          <div class="card-source">来源: type codebase_search</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">规则</div>
          <div class="card-question">根据 `run_command` 工具的文档，哪一种命令是“绝对不能提议”的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">规则</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中用粗体和全大写字母强调：“**NEVER PROPOSE A cd COMMAND**”（绝对不要提议一个 cd 命令）。</div>
          </div>
          <div class="card-source">来源: type run_command</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">功能</div>
          <div class="card-question">`create_memory` 工具的主要功能是什么？在创建一个新的记忆（memory）之前，文档建议先做什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">功能</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">该工具用于将与用户和任务相关的重要上下文保存到记忆数据库中，其主要功能通过 `Action` 参数实现，可以对记忆进行创建（'create'）、更新（'update'）或删除（'delete'）。在创建新记忆前，文档建议先检查是否存在语义相关的记忆，如果存在，则更新它而不是创建重复的记忆。</div>
          </div>
          <div class="card-source">来源: type create_memory</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">`multi_tool_use` 部分定义的 `parallel` 函数有什么用途？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`parallel` 函数用于同时运行多个工具，但前提是这些工具可以并行操作。即使提示建议按顺序使用工具，如果它们能够并行执行，也应该使用此函数。</div>
          </div>
          <div class="card-source">来源: multi_tool_use</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">用法</div>
          <div class="card-question">使用 `deploy_web_app` 工具时，`ProjectId` 参数在部署新网站和重新部署现有网站时应如何设置？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">用法</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在部署一个新网站时，`ProjectId` 参数应该留空。如果是重新部署一个现有网站，则应该在部署配置文件中查找对应的项目ID，并使用该确切的ID。</div>
          </div>
          <div class="card-source">来源: type deploy_web_app</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">限制</div>
          <div class="card-question">`view_file` 工具一次最多可以查看多少行内容？当查看的内容不完整时，文档建议怎么做？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">限制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">该工具一次最多可以查看 400 行。如果查看的内容不足以完成任务，并且怀疑所需信息在未显示的行中，文档建议应主动再次调用该工具来查看那些行，以确保获得完整的上下文。</div>
          </div>
          <div class="card-source">来源: type view_file</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">参数</div>
          <div class="card-question">`grep_search` 工具中的 `IsRegex` 和 `MatchPerLine` 参数分别控制什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">参数</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`IsRegex` 参数控制查询（Query）是否被当作正则表达式处理。`MatchPerLine` 参数控制返回结果的格式：如果为 `true`，则返回匹配的每一行内容和行号；如果为 `false`，则只返回包含匹配项的文件名。</div>
          </div>
          <div class="card-source">来源: type grep_search</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
